import {
    reqCartList,
    reqDeleteCartById,
    reqIsChecked
} from '@/api'
const state = {
    cartList: []
}
const actions = {
    // 获取购物车列表数据
    async getCartList({
        commit
    }) {
        let result = await reqCartList()
        if (result.code === 200) {
            // console.log(result);
            commit('GRTCARTLIST', result.data)
        }
    },
    // 删除购物车列表中某一个数据
    async getDeleteCartById({
        commit
    }, skuId) {
        let result = await reqDeleteCartById(skuId)
        if (result.code === 200) {
            return 'OK'
        } else {
            return Promise.reject(new Error('false'))
        }
    },
    // 修改复选框
    async getIsChecked({
        commit
    }, {
        skuId,
        isChecked
    }) {
        let result = await reqIsChecked(skuId, isChecked)
        if (result.code === 200) {
            return 'OK'
        } else {
            return Promise.reject(new Error('false'))
        }
    },
    // 删除选中商品
    // deleteCheckedAll(content) {}  content 里面就是一个小仓库 里面有 getters dispatch state commit
    deleteCheckedAll({
        dispatch,
        getters
    }) {
        // 创建一个promise 用来存储回调的结果 最后弄成一个数组 方便调用Promise.all()  该方法会遍历数组中每一个元素 如果都为真就返回成功 否者返回失败
        let PromiseAll = []
        getters.cartList.cartInfoList.forEach(item => {
            // 判断每一项 是否为勾选状态
            let promise = item.isChecked == 1 ? dispatch('getDeleteCartById', item.skuId) : ''
            PromiseAll.push(promise)
        })
        // 用Promise.all()方法 判断是成功还是失败
        return Promise.all(PromiseAll)
    },
    // 全选按钮
    updateIsCheckedAll({
        dispatch,
        state
    }, isChecked) {
        let PromiseAll = []
        state.cartList[0].cartInfoList.forEach(item => {
            let promise = dispatch('getIsChecked', {
                skuId: item.skuId,
                isChecked
            })
            PromiseAll.push(promise)
        })
        return Promise.all(PromiseAll)
    }
}
const mutations = {
    GRTCARTLIST(state, cartList) {
        state.cartList = cartList
    }
}
const getters = {
    cartList(state) {
        // 注意这里的state是自己仓库里面的state  不是大仓库的state
        // console.log(state, 'GETTER');
        return state.cartList[0] || {}
    }
}
export default {
    state,
    actions,
    mutations,
    getters
}